//package com.ami.kvm.jviewer.soc.video;
//
//import com.ami.kvm.jviewer.gui.JViewerView;
//import com.ami.kvm.jviewer.soc.SOCIVTPPktHdr;
//import com.ami.kvm.jviewer.soc.SOCJVVideo;
//import java.io.PrintStream;
//import java.util.Arrays;
//
//public class Decoder_bak
//{
//  public static final int MAX_X_RESOLUTION = 1500;
//  public static final int MAX_Y_RESOLUTION = 1500;
//  private SOCJVVideo m_socvidClnt;
//  private JViewerView m_view;
//  private byte[] m_decodeBuf;
//  private int[] previousYUVData;
//  short signed_wordvalue;
//  long uprdbuf_readbuf;
//  
//  class COMPRESSHEADER
//  {
//    int codesize;
//    int width;
//    int height;
//    int modes;
//    int bwidth;
//    int bheight;
//    int nd0;
//    int nd1;
//    int cmptype;
//    int qfactor;
//    int qfactoruv;
//    int nd11;
//    int nd12;
//    int nd13;
//    int nd14;
//    int nd15;
//    
//    COMPRESSHEADER() {}
//  }
//  
//  class COLOR_CACHE
//  {
//    long[] Color = new long[4];
//    char[] Index = new char[4];
//    byte BitMapBits;
//    
//    COLOR_CACHE() {}
//  }
//  
//  class rc4_state
//  {
//    int x;
//    int y;
//    int[] m = new int['?'];
//    
//    rc4_state() {}
//  }
//  
//  int nZeroACTerms = 0;
//  int[] rc4Tmp = new int['?'];
//  
//  final short WORD_hi_lo(byte paramByte1, byte paramByte2)
//  {
//    return (short)(getShort(paramByte1) << 8 | getShort(paramByte2));
//  }
//  
//  final long getLong(int paramInt)
//  {
//    return paramInt & 0xFFFFFFFF;
//  }
//  
//  final int getInt(int paramInt)
//  {
//    return paramInt & 0xFFFF;
//  }
//  
//  final short getShort(byte paramByte)
//  {
//    return (short)(paramByte & 0xFF);
//  }
//  
//  final int POWEROFTOW = 17;
//  final int LENGTH_256 = 256;
//  byte YQ_nr;
//  byte CbQ_nr;
//  byte CrQ_nr;
//  byte m_YDC_nr;
//  byte m_CbDC_nr;
//  byte m_CrDC_nr;
//  byte m_YAC_nr;
//  byte m_CbAC_nr;
//  byte m_CrAC_nr;
//  static short[] m_DCY = new short[1];
//  static short[] DCCb = new short[1];
//  static short[] DCCr = new short[1];
//  int[] YUVTile = new int[65535];
//  int[] m_DCT_coeff = new int[256];
//  byte[] Y = new byte[64];
//  byte[] Cb = new byte[64];
//  byte[] Cr = new byte[64];
//  final int RANGE_LIMIT_TABLE_SIZE = 1408;
//  byte[] rangeLimitTable = new byte[1408];
//  short[] rangeLimitTableShort = new short[1408];
//  int[] calculatedRGBofY = new int[256];
//  int[] calculatedRGBofCrToR = new int[256];
//  int[] calculatedRGBofCbToB = new int[256];
//  int[] calculatedRGBofCrToG = new int[256];
//  int[] calculatedRGBofCbToG = new int[256];
//  int position;
//  int SCALEFACTOR;
//  int SCALEFACTORUV;
//  int ADVANCESCALEFACTOR;
//  int ADVANCESCALEFACTORUV;
//  int selector;
//  int advance_selector;
//  int Mapping;
//  rc4_state s;
//  boolean DecodeRC4State;
//  byte m_Mode420 = 1;
//  int txb;
//  int tyb;
//  int oldxb;
//  int oldyb;
//  long pixels;
//  int readbuf;
//  int m_codebuf;
//  int m_newbuf;
//  int codesize;
//  static int m_newbits;
//  COMPRESSHEADER yheader;
//  COMPRESSHEADER uvheader;
//  int[] m_RecvBuffer;
//  int _index;
//  int WIDTH;
//  int HEIGHT;
//  int tmp_HEIGHTBy16;
//  int tmp_WIDTHBy16;
//  int RealWIDTH;
//  int RealHEIGHT;
//  byte[] DecodeKeys = "fedcba9876543210".getBytes();
//  byte[] buf;
//  byte bp;
//  int byte_pos;
//  byte YH;
//  byte YV;
//  byte CbH;
//  byte CbV;
//  byte CrH;
//  byte CrV;
//  long[][] m_QT;
//  HuffmanTable[] m_HTDC = new HuffmanTable[4];
//  HuffmanTable[] m_HTAC = new HuffmanTable[4];
//  byte[] tab_1 = new byte[64];
//  byte[] tab_2 = new byte[64];
//  byte[] tab_3 = new byte[64];
//  byte[] tab_4 = new byte[64];
//  short[] m_Cr_tab = new short['?'];
//  short[] m_Cb_tab = new short['?'];
//  short[] m_Cr_Cb_green_tab = new short[65536];
//  byte d_k;
//  short w1;
//  short w2;
//  int wordval;
//  int[] m_mask = new int[17];
//  short[] neg_pow2 = new short[17];
//  public final int NO_LEAF = 0;
//  public final int LEFT_LEAF = 1;
//  public final int RIGHT_LEAF = 2;
//  public final int VQ_BLOCK_START_CODE = 0;
//  public final int JPEG_BLOCK_START_CODE = 1;
//  public final int VQ_BLOCK_SKIP_CODE = 2;
//  public final int JPEG_BLOCK_SKIP_CODE = 3;
//  public final int BLOCK_START_LENGTH = 2;
//  public final int BLOCK_START_MASK = 3;
//  public final int BLOCK_HEADER_S_MASK = 1;
//  public final int BLOCK_HEADER_MASK = 15;
//  public final int VQ_HEADER_MASK = 1;
//  public final int VQ_NO_UPDATE_HEADER = 0;
//  public final int VQ_UPDATE_HEADER = 1;
//  public final int VQ_NO_UPDATE_LENGTH = 3;
//  public final int VQ_UPDATE_LENGTH = 27;
//  public final int VQ_INDEX_MASK = 3;
//  public final int VQ_COLOR_MASK = 16777215;
//  public final int JPEG_NO_SKIP_CODE = 0;
//  public final int JPEG_NO_SKIP_PASS2_CODE = 2;
//  public final int JPEG_SKIP_PASS2_CODE = 10;
//  public final int LOW_JPEG_NO_SKIP_CODE = 4;
//  public final int LOW_JPEG_SKIP_CODE = 12;
//  public final int JPEG_SKIP_CODE = 8;
//  public final int FRAME_END_CODE = 9;
//  public final int VQ_NO_SKIP_1_COLOR_CODE = 5;
//  public final int VQ_NO_SKIP_2_COLOR_CODE = 6;
//  public final int VQ_NO_SKIP_4_COLOR_CODE = 7;
//  public final int VQ_SKIP_1_COLOR_CODE = 13;
//  public final int VQ_SKIP_2_COLOR_CODE = 14;
//  public final int VQ_SKIP_4_COLOR_CODE = 15;
//  public final int BLOCK_AST2100_START_LENGTH = 4;
//  public final int BLOCK_AST2100_SKIP_LENGTH = 20;
//  int[] workspace = new int[64];
//  short lookBitResult;
//  short[] DCT_tcoeff = new short[64];
//  short[] min_code;
//  short[] maj_code;
//  short[] huff_values;
//  final int FIX_1_082392200 = 277;
//  final int FIX_1_414213562 = 362;
//  final int FIX_1_847759065 = 473;
//  final int FIX_2_613125930 = 669;
//  final int DCTSIZE = 8;
//  final int DCTSIZE_0 = 0;
//  final int DCTSIZE_1 = 8;
//  final int DCTSIZE_2 = 16;
//  final int DCTSIZE_3 = 24;
//  final int DCTSIZE_4 = 32;
//  final int DCTSIZE_5 = 40;
//  final int DCTSIZE_6 = 48;
//  final int DCTSIZE_7 = 56;
//  int[] YValueInTile = new int['?'];
//  int[][] YValueInTile420 = new int[4][64];
//  int[] CbValueInTile = new int[64];
//  int[] CrValueInTile = new int[64];
//  COLOR_CACHE m_VQ;
//  
//  public Decoder(JViewerView paramJViewerView, byte[] paramArrayOfByte, SOCJVVideo paramSOCJVVideo)
//  {
//    this.m_VQ = new COLOR_CACHE();
//    this.m_view = paramJViewerView;
//    this.m_decodeBuf = paramArrayOfByte;
//    this.m_socvidClnt = paramSOCJVVideo;
//    
//    this.position = 0;
//    this.DecodeRC4State = false;
//    
//    this.m_YDC_nr = 0;
//    this.m_CbDC_nr = 1;
//    this.m_CrDC_nr = 1;
//    this.m_YAC_nr = 0;
//    this.m_CbAC_nr = 1;
//    this.m_CrAC_nr = 1;
//    this.d_k = 0;
//    for (int i = 1; i < 17; i++)
//    {
//      int j = (int)(1.0D - Math.pow(2.0D, i));
//      this.neg_pow2[i] = ((short)j);
//    }
//    for (int i = 0; i < 4; i++)
//    {
//      this.m_HTDC[i] = new HuffmanTable();
//      this.m_HTAC[i] = new HuffmanTable();
//    }
//    this.uvheader = new COMPRESSHEADER();
//    this.yheader = new COMPRESSHEADER();
//    
//    this.w1 = 0;
//    this.w2 = 0;
//    
//    this.bp = 0;
//    this.wordval = 0;
//    
//    this.m_QT = new long[4][64];
//    
//    initColorTable();
//    initRangeLimitTable();
//    initHuffmanTable();
//    
//    this.previousYUVData = new int[7680000];
//  }
//  
//  public final void setBuf(byte[] paramArrayOfByte)
//  {
//    this.m_decodeBuf = paramArrayOfByte;
//  }
//  
//  final void initRangeLimitTable()
//  {
//    Arrays.fill(this.rangeLimitTable, 0, 255, (byte)0);
//    for (short i = 0; i < 256; i = (short)(i + 1))
//    {
//      this.rangeLimitTable[(256 + i)] = ((byte)i);
//      this.rangeLimitTableShort[(256 + i)] = i;
//    }
//    Arrays.fill(this.rangeLimitTable, 512, 895, (byte)-1);
//    Arrays.fill(this.rangeLimitTableShort, 512, 895, (short)255);
//    
//    Arrays.fill(this.rangeLimitTable, 896, 1279, (byte)0);
//    Arrays.fill(this.rangeLimitTableShort, 896, 1279, (short)0);
//    for (int i = 1280; i < 1408; i = (short)(i + 1))
//    {
//      this.rangeLimitTable[i] = ((byte)i);
//      this.rangeLimitTableShort[i] = ((short)(i & 0xFF));
//    }
//  }
//  
//  final short lookKbits(byte paramByte)
//  {
//    return (short)(int)(getLong(this.m_RecvBuffer[0]) >> 32 - paramByte);
//  }
//  
//  final void skipKbits(byte paramByte)
//  {
//    if (m_newbits - paramByte <= 0)
//    {
//      if (SOCIVTPPktHdr.VIRTADD + this._index > this.m_RecvBuffer.length - 1) {
//        this._index = (this.m_RecvBuffer.length - 1 - SOCIVTPPktHdr.VIRTADD);
//      }
//      this.m_RecvBuffer[0] = ((int)(getLong(this.m_RecvBuffer[0]) << paramByte) | (int)((getLong(this.m_RecvBuffer[1]) | getLong(this.m_RecvBuffer[(SOCIVTPPktHdr.VIRTADD + this._index)]) >> m_newbits) >> 32 - paramByte));
//      this.m_RecvBuffer[1] = ((int)(getLong(this.m_RecvBuffer[(SOCIVTPPktHdr.VIRTADD + this._index)]) << paramByte - m_newbits));
//      m_newbits = 32 + m_newbits - paramByte;
//      this._index += 1;
//    }
//    else
//    {
//      this.m_RecvBuffer[0] = (this.m_RecvBuffer[0] << paramByte | (int)(getLong(this.m_RecvBuffer[1]) >> 32 - paramByte));
//      this.m_RecvBuffer[1] <<= paramByte;
//      m_newbits -= paramByte;
//    }
//  }
//  
//  final short getKbits(byte paramByte)
//  {
//    this.signed_wordvalue = lookKbits(paramByte);
//    if ((1L << paramByte - 1 & this.signed_wordvalue) == 0L) {
//      this.signed_wordvalue = ((short)(this.signed_wordvalue + this.neg_pow2[paramByte]));
//    }
//    skipKbits(paramByte);
//    return this.signed_wordvalue;
//  }
//  
//  final void calculate_mask()
//  {
//    for (int i = 0; i <= 16; i = (byte)(i + 1)) {
//      this.m_mask[i] = ((int)((getLong(65536) >> i) - 1L));
//    }
//  }
//  
//  byte[] setQuantizationTable(byte[] paramArrayOfByte1, byte paramByte, byte[] paramArrayOfByte2)
//  {
//    for (int i = 0; i < 64; i = (byte)(i + 1))
//    {
//      int j = paramArrayOfByte1[i] * 16 / paramByte;
//      if (j <= 0) {
//        j = 1;
//      }
//      if (j > 255) {
//        j = 255;
//      }
//      paramArrayOfByte2[JTables.zigzag[i]] = ((byte)j);
//    }
//    return paramArrayOfByte2;
//  }
//  
//  void loadLuminanceQuantizationTable(long[] paramArrayOfLong)
//  {
//    float[] arrayOfFloat = { 1.0F, 1.3870399F, 1.306563F, 1.1758755F, 1.0F, 0.78569496F, 0.5411961F, 0.27589938F };
//    
//    byte[] arrayOfByte = new byte[64];
//    switch (this.selector)
//    {
//    case 0: 
//      JTables.std_luminance_qt = JTables.Tbl_000Y;
//      break;
//    case 1: 
//      JTables.std_luminance_qt = JTables.Tbl_014Y;
//      break;
//    case 2: 
//      JTables.std_luminance_qt = JTables.Tbl_029Y;
//      break;
//    case 3: 
//      JTables.std_luminance_qt = JTables.Tbl_043Y;
//      break;
//    case 4: 
//      JTables.std_luminance_qt = JTables.Tbl_057Y;
//      break;
//    case 5: 
//      JTables.std_luminance_qt = JTables.Tbl_071Y;
//      break;
//    case 6: 
//      JTables.std_luminance_qt = JTables.Tbl_086Y;
//      break;
//    case 7: 
//      JTables.std_luminance_qt = JTables.Tbl_100Y;
//    }
//    arrayOfByte = setQuantizationTable(JTables.std_luminance_qt, (byte)this.SCALEFACTOR, arrayOfByte);
//    for (int i = 0; i <= 63; i = (byte)(i + 1)) {
//      paramArrayOfLong[i] = getShort(arrayOfByte[JTables.zigzag[i]]);
//    }
//    int  i = 0;
//    for (int j = 0; j <= 7; j = (byte)(j + 1)) {
//      for (int k = 0; k <= 7; k = (byte)(k + 1))
//      {
//        int m = (int)((float)paramArrayOfLong[i] * (arrayOfFloat[j] * arrayOfFloat[k]));
//        paramArrayOfLong[i] = (m * 65536);
//        i = (byte)(i + 1);
//      }
//    }
//    this.byte_pos += 64;
//  }
//  
//  void loadChrominanceQuantizationTable(long[] paramArrayOfLong)
//  {
//    float[] arrayOfFloat = { 1.0F, 1.3870399F, 1.306563F, 1.1758755F, 1.0F, 0.78569496F, 0.5411961F, 0.27589938F };
//    
//    byte[] arrayOfByte = new byte[64];
//    if (this.Mapping == 1) {
//      switch (this.selector)
//      {
//      case 0: 
//        JTables.std_chrominance_qt = JTables.Tbl_000Y;
//        break;
//      case 1: 
//        JTables.std_chrominance_qt = JTables.Tbl_014Y;
//        break;
//      case 2: 
//        JTables.std_chrominance_qt = JTables.Tbl_029Y;
//        break;
//      case 3: 
//        JTables.std_chrominance_qt = JTables.Tbl_043Y;
//        break;
//      case 4: 
//        JTables.std_chrominance_qt = JTables.Tbl_057Y;
//        break;
//      case 5: 
//        JTables.std_chrominance_qt = JTables.Tbl_071Y;
//        break;
//      case 6: 
//        JTables.std_chrominance_qt = JTables.Tbl_086Y;
//        break;
//      case 7: 
//        JTables.std_chrominance_qt = JTables.Tbl_100Y;
//      }
//    } else {
//      switch (this.selector)
//      {
//      case 0: 
//        JTables.std_chrominance_qt = JTables.Tbl_000UV;
//        break;
//      case 1: 
//        JTables.std_chrominance_qt = JTables.Tbl_014UV;
//        break;
//      case 2: 
//        JTables.std_chrominance_qt = JTables.Tbl_029UV;
//        break;
//      case 3: 
//        JTables.std_chrominance_qt = JTables.Tbl_043UV;
//        break;
//      case 4: 
//        JTables.std_chrominance_qt = JTables.Tbl_057UV;
//        break;
//      case 5: 
//        JTables.std_chrominance_qt = JTables.Tbl_071UV;
//        break;
//      case 6: 
//        JTables.std_chrominance_qt = JTables.Tbl_086UV;
//        break;
//      case 7: 
//        JTables.std_chrominance_qt = JTables.Tbl_100UV;
//      }
//    }
//    arrayOfByte = setQuantizationTable(JTables.std_chrominance_qt, (byte)this.SCALEFACTORUV, arrayOfByte);
//    for (int i = 0; i <= 63; i = (byte)(i + 1)) {
//      paramArrayOfLong[i] = getShort(arrayOfByte[JTables.zigzag[i]]);
//    }
//    int i = 0;
//    for (int j = 0; j <= 7; j = (byte)(j + 1)) {
//      for (int k = 0; k <= 7; k = (byte)(k + 1))
//      {
//        int m = (int)((float)paramArrayOfLong[i] * (arrayOfFloat[j] * arrayOfFloat[k]));
//        paramArrayOfLong[i] = (m * 65536);
//        i = (byte)(i + 1);
//      }
//    }
//    this.byte_pos += 64;
//  }
//  
//  void loadPass2LuminanceQuantizationTable(long[] paramArrayOfLong)
//  {
//    float[] arrayOfFloat = { 1.0F, 1.3870399F, 1.306563F, 1.1758755F, 1.0F, 0.78569496F, 0.5411961F, 0.27589938F };
//    
//    byte[] arrayOfByte = new byte[64];
//    switch (this.advance_selector)
//    {
//    case 0: 
//      JTables.std_luminance_qt = JTables.Tbl_000Y;
//      break;
//    case 1: 
//      JTables.std_luminance_qt = JTables.Tbl_014Y;
//      break;
//    case 2: 
//      JTables.std_luminance_qt = JTables.Tbl_029Y;
//      break;
//    case 3: 
//      JTables.std_luminance_qt = JTables.Tbl_043Y;
//      break;
//    case 4: 
//      JTables.std_luminance_qt = JTables.Tbl_057Y;
//      break;
//    case 5: 
//      JTables.std_luminance_qt = JTables.Tbl_071Y;
//      break;
//    case 6: 
//      JTables.std_luminance_qt = JTables.Tbl_086Y;
//      break;
//    case 7: 
//      JTables.std_luminance_qt = JTables.Tbl_100Y;
//    }
//    arrayOfByte = setQuantizationTable(JTables.std_luminance_qt, (byte)this.ADVANCESCALEFACTOR, arrayOfByte);
//    for (int i = 0; i <= 63; i = (byte)(i + 1)) {
//      paramArrayOfLong[i] = getShort(arrayOfByte[JTables.zigzag[i]]);
//    }
//    int i = 0;
//    for (int j = 0; j <= 7; j = (byte)(j + 1)) {
//      for (int k = 0; k <= 7; k = (byte)(k + 1))
//      {
//        int m = (int)((float)paramArrayOfLong[i] * (arrayOfFloat[j] * arrayOfFloat[k]));
//        paramArrayOfLong[i] = (m * 65536);
//        i = (byte)(i + 1);
//      }
//    }
//    this.byte_pos += 64;
//  }
//  
//  void loadPass2ChrominanceQuantizationTable(long[] paramArrayOfLong)
//  {
//    float[] arrayOfFloat = { 1.0F, 1.3870399F, 1.306563F, 1.1758755F, 1.0F, 0.78569496F, 0.5411961F, 0.27589938F };
//    
//    byte[] arrayOfByte = new byte[64];
//    if (this.Mapping == 1) {
//      switch (this.advance_selector)
//      {
//      case 0: 
//        JTables.std_chrominance_qt = JTables.Tbl_000Y;
//        break;
//      case 1: 
//        JTables.std_chrominance_qt = JTables.Tbl_014Y;
//        break;
//      case 2: 
//        JTables.std_chrominance_qt = JTables.Tbl_029Y;
//        break;
//      case 3: 
//        JTables.std_chrominance_qt = JTables.Tbl_043Y;
//        break;
//      case 4: 
//        JTables.std_chrominance_qt = JTables.Tbl_057Y;
//        break;
//      case 5: 
//        JTables.std_chrominance_qt = JTables.Tbl_071Y;
//        break;
//      case 6: 
//        JTables.std_chrominance_qt = JTables.Tbl_086Y;
//        break;
//      case 7: 
//        JTables.std_chrominance_qt = JTables.Tbl_100Y;
//      }
//    } else {
//      switch (this.advance_selector)
//      {
//      case 0: 
//        JTables.std_chrominance_qt = JTables.Tbl_000UV;
//        break;
//      case 1: 
//        JTables.std_chrominance_qt = JTables.Tbl_014UV;
//        break;
//      case 2: 
//        JTables.std_chrominance_qt = JTables.Tbl_029UV;
//        break;
//      case 3: 
//        JTables.std_chrominance_qt = JTables.Tbl_043UV;
//        break;
//      case 4: 
//        JTables.std_chrominance_qt = JTables.Tbl_057UV;
//        break;
//      case 5: 
//        JTables.std_chrominance_qt = JTables.Tbl_071UV;
//        break;
//      case 6: 
//        JTables.std_chrominance_qt = JTables.Tbl_086UV;
//        break;
//      case 7: 
//        JTables.std_chrominance_qt = JTables.Tbl_100UV;
//      }
//    }
//    setQuantizationTable(JTables.std_chrominance_qt, (byte)this.ADVANCESCALEFACTORUV, arrayOfByte);
//    for (int i = 0; i <= 63; i = (byte)(i + 1)) {
//      paramArrayOfLong[i] = getShort(arrayOfByte[JTables.zigzag[i]]);
//    }
//    int i = 0;
//    for (int j = 0; j <= 7; j = (byte)(j + 1)) {
//      for (int k = 0; k <= 7; k = (byte)(k + 1))
//      {
//        int m = (int)((float)paramArrayOfLong[i] * (arrayOfFloat[j] * arrayOfFloat[k]));
//        paramArrayOfLong[i] = (m * 65536);
//        i = (byte)(i + 1);
//      }
//    }
//    this.byte_pos += 64;
//  }
//  
//  HuffmanTable loadHuffmanTable(HuffmanTable paramHuffmanTable, byte[] paramArrayOfByte, short[] paramArrayOfShort, int[] paramArrayOfInt)
//  {
//    for (int i = 1; i <= 16; i = (byte)(i + 1)) {
//      paramHuffmanTable.Length[i] = paramArrayOfByte[i];
//    }
//    int k = 0;
//    int j;
//    for (byte b = 1; b <= 16; b = (byte)(b + 1)) {
//      for (byte i = 0; i < getShort(paramHuffmanTable.Length[b]); j = (byte)(i + 1))
//      {
//    	  if (k >= paramArrayOfShort.length){
//    		  break;
//    	  }
//    	  paramHuffmanTable.V[getInt(WORD_hi_lo(b, i))] = paramArrayOfShort[k];
//		  k++;
//      }
//    }
//    int m = 0;
//    for (int b = 1; b <= 16; b = (byte)(b + 1))
//    {
//      paramHuffmanTable.minor_code[b] = ((short)m);
//      for (j = 1; j <= getShort(paramHuffmanTable.Length[b]); j = (byte)(j + 1)) {
//        m++;
//      }
//      paramHuffmanTable.major_code[b] = ((short)(m - 1));
//      m *= 2;
//      if (getShort(paramHuffmanTable.Length[b]) == 0)
//      {
//        paramHuffmanTable.minor_code[b] = -1;
//        paramHuffmanTable.major_code[b] = 0;
//      }
//    }
//    paramHuffmanTable.Len[0] = 2;
//    k = 2;
//    for (int n = 1; n < 65535; n++) {
//      if (n < paramArrayOfInt[k])
//      {
//        paramHuffmanTable.Len[n] = ((byte)(paramArrayOfInt[(k + 1)] & 0xFF));
//      }
//      else
//      {
//        k += 2;
//        paramHuffmanTable.Len[n] = ((byte)(paramArrayOfInt[(k + 1)] & 0xFF));
//      }
//    }
//    return paramHuffmanTable;
//  }
//  
//  HuffmanTable loadHuffmanTableYDC(HuffmanTable paramHuffmanTable)
//  {
//    for (int i = 1; i <= 16; i = (byte)(i + 1)) {
//      paramHuffmanTable.Length[i] = JTables.std_dc_luminance_nrcodes[i];
//    }
//    int k = 0;
//    int j;
//    for (byte b = 1; b <= 16; b = (byte)(b + 1)) {
//      for (byte i = 0; i < getShort(paramHuffmanTable.Length[b]); j = (byte)(i + 1))
//      {
//        paramHuffmanTable.V[getInt(WORD_hi_lo(b, i))] = JTables.std_dc_luminance_values[k];
//        k = (byte)(k + 1);
//      }
//    }
//    short m = 0;
//    for (int b = 1; b <= 16; b = (byte)(b + 1))
//    {
//      paramHuffmanTable.minor_code[b] = m;
//      for (j = 1; j <= getShort(paramHuffmanTable.Length[b]); j = (byte)(j + 1)) {
//        m = (short)(m + 1);
//      }
//      paramHuffmanTable.major_code[b] = ((short)(m - 1));
//      m = (short)(m * 2);
//      if (getShort(paramHuffmanTable.Length[b]) == 0)
//      {
//        paramHuffmanTable.minor_code[b] = -1;
//        paramHuffmanTable.major_code[b] = 0;
//      }
//    }
//    return paramHuffmanTable;
//  }
//  
//  HuffmanTable loadHuffmanTableYAC(HuffmanTable paramHuffmanTable)
//  {
//    for (int i = 1; i <= 16; i = (byte)(i + 1)) {
//      paramHuffmanTable.Length[i] = JTables.std_ac_luminance_nrcodes[i];
//    }
//    int k = 0;
//    int j;
//    for (byte b = 1; b <= 16; b = (byte)(b + 1)) {
//      for (byte i = 0; i < getShort(paramHuffmanTable.Length[b]); j = (byte)(i + 1))
//      {
//        paramHuffmanTable.V[getInt(WORD_hi_lo(b, i))] = JTables.std_ac_luminance_values[k];
//        k = (byte)(k + 1);
//      }
//    }
//    short m = 0;
//    for (int b = 1; b <= 16; b = (byte)(b + 1))
//    {
//      paramHuffmanTable.minor_code[b] = m;
//      for (j = 1; j <= getShort(paramHuffmanTable.Length[b]); j = (byte)(j + 1)) {
//        m = (short)(m + 1);
//      }
//      paramHuffmanTable.major_code[b] = ((short)(m - 1));
//      m = (short)(m * 2);
//      if (getShort(paramHuffmanTable.Length[b]) == 0)
//      {
//        paramHuffmanTable.minor_code[b] = -1;
//        paramHuffmanTable.major_code[b] = 0;
//      }
//    }
//    return paramHuffmanTable;
//  }
//  
//  void decodeHuffmanDataUnit(byte paramByte1, byte paramByte2, short[] paramArrayOfShort, short paramShort)
//  {
//    byte b2 = 0;
//    int k = 0;
//    int m = 0;int n = 0;
//    int i1 = 0;
//    
//    Arrays.fill(this.m_DCT_coeff, 0);
//    
//    this.min_code = this.m_HTDC[paramByte1].minor_code;
//    
//    this.huff_values = this.m_HTDC[paramByte1].V;
//    
//    int i = 0;
//    byte b1 = this.m_HTDC[paramByte1].Len[(this.m_RecvBuffer[0] >> 16 & 0xFFFF)];
//    int j = lookKbits(b1);
//    skipKbits(b1);
//    b2 = (byte)this.huff_values[WORD_hi_lo(b1, (byte)(j - this.min_code[b1]))];
//    if (b2 == 0)
//    {
//      this.m_DCT_coeff[(paramShort + 0)] = paramArrayOfShort[0];
//    }
//    else
//    {
//      int i2 = paramArrayOfShort[0] + getKbits(b2);
//      this.m_DCT_coeff[paramShort] = i2;
//      paramArrayOfShort[0] = ((short)this.m_DCT_coeff[paramShort]);
//    }
//    this.min_code = this.m_HTAC[paramByte2].minor_code;
//    this.huff_values = this.m_HTAC[paramByte2].V;
//    
//    i = 1;
//    do
//    {
//      b1 = this.m_HTAC[paramByte2].Len[(this.m_RecvBuffer[0] >> 16 & 0xFFFF)];
//      j = lookKbits(b1);
//      skipKbits(b1);
//      
//      i1 = (byte)this.huff_values[WORD_hi_lo(b1, (byte)(j - this.min_code[b1]))];
//      b2 = (byte)(i1 & 0xF);
//      k = (byte)(i1 >> 4 & 0xF);
//      if (b2 == 0)
//      {
//        if (k != 15) {
//          break;
//        }
//        i = (byte)(i + 16);
//      }
//      else
//      {
//        i = (byte)(i + k);
//        this.m_DCT_coeff[(paramShort + JTables.dezigzag[i])] = getKbits(b2);
//        i = (byte)(i + 1);
//      }
//    } while (i < 64);
//  }
//  
//  final void precalculateCrCbTables()
//  {
//    for (int i = 0; i <= 255; i = (short)(i + 1)) {
//      this.m_Cr_tab[i] = ((short)(int)((i - 128.0D) * 1.402D));
//    }
//    for (int i = 0; i <= 255; i = (short)(i + 1)) {
//      this.m_Cb_tab[i] = ((short)(int)((i - 128.0D) * 1.772D));
//    }
//    for (int i = 0; i <= 255; i = (short)(i + 1)) {
//      for (int j = 0; j <= 255; j = (short)(j + 1)) {
//        this.m_Cr_Cb_green_tab[((i << 8) + j)] = ((short)(int)(-0.34414D * (j - 128.0D) - 0.71414D * (i - 128.0D)));
//      }
//    }
//  }
//  
//  void calculateTabs()
//  {
//    byte[] arrayOfByte = new byte['?'];
//    int i;
//    for (int j = 0; j < 16; j = (byte)(j + 1)) {
//      for (i = 0; i < 16; i = (byte)(i + 1)) {
//        arrayOfByte[(j * 16 + i)] = ((byte)(j / this.YV * 8 + i / this.YH));
//      }
//    }
//    for (int j = 0; j < 8; j = (byte)(j + 1))
//    {
//      for (i = 0; i < 8; i = (byte)(i + 1)) {
//        this.tab_1[(j * 8 + i)] = arrayOfByte[(j * 16 + i)];
//      }
//      for (i = 8; i < 16; i = (byte)(i + 1)) {
//        this.tab_2[(j * 8 + (i - 8))] = arrayOfByte[(j * 16 + i)];
//      }
//    }
//    for (int j = 8; j < 16; j = (byte)(j + 1))
//    {
//      for (i = 0; i < 8; i = (byte)(i + 1)) {
//        this.tab_3[((j - 8) * 8 + i)] = arrayOfByte[(j * 16 + i)];
//      }
//      for (i = 8; i < 16; i = (byte)(i + 1)) {
//        this.tab_4[((j - 8) * 8 + (i - 8))] = arrayOfByte[(j * 16 + i)];
//      }
//    }
//  }
//  
//  public void initHuffmanTable()
//  {
//    this.m_HTDC[0] = loadHuffmanTable(this.m_HTDC[0], JTables.std_dc_luminance_nrcodes, JTables.std_dc_luminance_values, JTables.DC_LUMINANCE_HUFFMANCODE);
//    this.m_HTAC[0] = loadHuffmanTable(this.m_HTAC[0], JTables.std_ac_luminance_nrcodes, JTables.std_ac_luminance_values, JTables.AC_LUMINANCE_HUFFMANCODE);
//    this.m_HTDC[1] = loadHuffmanTable(this.m_HTDC[1], JTables.std_dc_chrominance_nrcodes, JTables.std_dc_chrominance_values, JTables.DC_CHROMINANCE_HUFFMANCODE);
//    this.m_HTAC[1] = loadHuffmanTable(this.m_HTAC[1], JTables.std_ac_chrominance_nrcodes, JTables.std_ac_chrominance_values, JTables.AC_CHROMINANCE_HUFFMANCODE);
//  }
//  
//  final int FIX_G(double paramDouble)
//  {
//    return (int)(paramDouble * 65536.0D + 0.5D);
//  }
//  
//  void initColorTable()
//  {
//    int k = 65536;
//    int m = k >> 1;
//    
//    int i = 0;
//    for (int j = -128; i < 256; j++)
//    {
//      this.calculatedRGBofCrToR[i] = (FIX_G(1.597656D) * j + m >> 16);
//      this.calculatedRGBofCbToB[i] = (FIX_G(2.015625D) * j + m >> 16);
//      this.calculatedRGBofCrToG[i] = (-FIX_G(0.8125D) * j + m >> 16);
//      this.calculatedRGBofCbToG[i] = (-FIX_G(0.390625D) * j + m >> 16);i++;
//    }
//    i = 0;
//    for (int j = -16; i < 256; j++)
//    {
//      this.calculatedRGBofY[i] = (FIX_G(1.164D) * j + m >> 16);i++;
//    }
//  }
//  
//  void resync()
//  {
//    this.byte_pos += 2;
//    byte_p(this.byte_pos);
//    if (getShort(this.bp) == 255) {
//      this.byte_pos += 1;
//    }
//    this.w1 = WORD_hi_lo(this.bp, (byte)0);
//    byte_p(this.byte_pos);
//    if (getShort(this.bp) == 255) {
//      this.byte_pos += 1;
//    }
//    this.w1 = ((short)(this.w1 + getShort(this.bp)));
//    byte_p(this.byte_pos);
//    if (getShort(this.bp) == 255) {
//      this.byte_pos += 1;
//    }
//    this.w2 = WORD_hi_lo(this.bp, (byte)0);
//    byte_p(this.byte_pos);
//    if (getShort(this.bp) == 255) {
//      this.byte_pos += 1;
//    }
//    this.w2 = ((short)(this.w2 + getShort(this.bp)));
//    this.wordval = getInt(this.w1);
//    this.d_k = 0;
//    m_DCY[0] = 0;
//    DCCb[0] = 0;
//    DCCr[0] = 0;
//  }
//  
//  final byte byte_p(int paramInt)
//  {
//    return this.buf[(paramInt++)];
//  }
//  
//  final int MULTIPLY(int paramInt1, int paramInt2)
//  {
//    return paramInt1 * paramInt2 >> 8;
//  }
//  
//  void inverseDCT(int paramInt, byte paramByte)
//  {
//    int i = 0;
//    int j = 0;
//    int k = 0;
//    
//    k = paramInt;
//    int m;
//    int n;
//    int i1;
//    int i2;
//    int i7;
//    int i8;
//    int i10;
//    int i9;
//    int i3;
//    int i4;
//    int i5;
//    int i6;
//    int i15;
//    int i12;
//    int i13;
//    int i14;
//    int i11;
//    for (int i16 = 8; i16 > 0; i16--) {
//      if ((this.m_DCT_coeff[(k + 8)] | this.m_DCT_coeff[(k + 16)] | this.m_DCT_coeff[(k + 24)] | this.m_DCT_coeff[(k + 32)] | this.m_DCT_coeff[(k + 40)] | this.m_DCT_coeff[(k + 48)] | this.m_DCT_coeff[(k + 56)]) == 0)
//      {
//        int i17 = (int)(this.m_DCT_coeff[(k + 0)] * this.m_QT[paramByte][(i + 0)]) >> 16;
//        
//        this.workspace[(j + 0)] = i17;
//        this.workspace[(j + 8)] = i17;
//        this.workspace[(j + 16)] = i17;
//        this.workspace[(j + 24)] = i17;
//        this.workspace[(j + 32)] = i17;
//        this.workspace[(j + 40)] = i17;
//        this.workspace[(j + 48)] = i17;
//        this.workspace[(j + 56)] = i17;
//        
//        k++;
//        i++;
//        j++;
//        this.nZeroACTerms += 1;
//      }
//      else
//      {
//        m = (int)(this.m_DCT_coeff[(k + 0)] * this.m_QT[paramByte][(i + 0)]) >> 16;
//        n = (int)(this.m_DCT_coeff[(k + 16)] * this.m_QT[paramByte][(i + 16)]) >> 16;
//        i1 = (int)(this.m_DCT_coeff[(k + 32)] * this.m_QT[paramByte][(i + 32)]) >> 16;
//        i2 = (int)(this.m_DCT_coeff[(k + 48)] * this.m_QT[paramByte][(i + 48)]) >> 16;
//        
//        i7 = m + i1;
//        i8 = m - i1;
//        
//        i10 = n + i2;
//        i9 = MULTIPLY(n - i2, 362) - i10;
//        
//        m = i7 + i10;
//        i2 = i7 - i10;
//        n = i8 + i9;
//        i1 = i8 - i9;
//        
//        i3 = (int)(this.m_DCT_coeff[(k + 8)] * this.m_QT[paramByte][(i + 8)]) >> 16;
//        i4 = (int)(this.m_DCT_coeff[(k + 24)] * this.m_QT[paramByte][(i + 24)]) >> 16;
//        i5 = (int)(this.m_DCT_coeff[(k + 40)] * this.m_QT[paramByte][(i + 40)]) >> 16;
//        i6 = (int)(this.m_DCT_coeff[(k + 56)] * this.m_QT[paramByte][(i + 56)]) >> 16;
//        
//        i15 = i5 + i4;
//        i12 = i5 - i4;
//        i13 = i3 + i6;
//        i14 = i3 - i6;
//        
//        i6 = i13 + i15;
//        i8 = MULTIPLY(i13 - i15, 362);
//        
//        i11 = MULTIPLY(i12 + i14, 473);
//        i7 = MULTIPLY(i14, 277) - i11;
//        i9 = MULTIPLY(i12, 64867) + i11;
//        
//        i5 = i9 - i6;
//        i4 = i8 - i5;
//        i3 = i7 + i4;
//        
//        this.workspace[(j + 0)] = (m + i6);
//        this.workspace[(j + 56)] = (m - i6);
//        this.workspace[(j + 8)] = (n + i5);
//        this.workspace[(j + 48)] = (n - i5);
//        this.workspace[(j + 16)] = (i1 + i4);
//        this.workspace[(j + 40)] = (i1 - i4);
//        this.workspace[(j + 32)] = (i2 + i3);
//        this.workspace[(j + 24)] = (i2 - i3);
//        
//        k++;
//        i++;
//        j++;
//      }
//    }
//    j = 0;
//    
//    int i18 = 0;
//    int i19 = 0;
//    for (int i16 = 0; i16 < 8; i16++)
//    {
//      i18 = paramInt + i16 * 8;
//      
//      i7 = this.workspace[(j + 0)] + this.workspace[(j + 4)];
//      i8 = this.workspace[(j + 0)] - this.workspace[(j + 4)];
//      
//      i10 = this.workspace[(j + 2)] + this.workspace[(j + 6)];
//      i9 = MULTIPLY(this.workspace[(j + 2)] - this.workspace[(j + 6)], 362) - i10;
//      
//      m = i7 + i10;
//      i2 = i7 - i10;
//      n = i8 + i9;
//      i1 = i8 - i9;
//      
//      i15 = this.workspace[(j + 5)] + this.workspace[(j + 3)];
//      i12 = this.workspace[(j + 5)] - this.workspace[(j + 3)];
//      i13 = this.workspace[(j + 1)] + this.workspace[(j + 7)];
//      i14 = this.workspace[(j + 1)] - this.workspace[(j + 7)];
//      
//      i6 = i13 + i15;
//      i8 = MULTIPLY(i13 - i15, 362);
//      
//      i11 = MULTIPLY(i12 + i14, 473);
//      i7 = MULTIPLY(i14, 277) - i11;
//      i9 = MULTIPLY(i12, 64867) + i11;
//      
//      i5 = i9 - i6;
//      i4 = i8 - i5;
//      i3 = i7 + i4;
//      
//      i19 = 0;
//      i19 = 128 + (m + i6 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 0)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      i19 = 128 + (m - i6 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 7)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      i19 = 128 + (n + i5 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 1)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      i19 = 128 + (n - i5 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 6)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      i19 = 128 + (i1 + i4 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 2)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      i19 = 128 + (i1 - i4 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 5)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      i19 = 128 + (i2 + i3 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 4)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      i19 = 128 + (i2 - i3 >> 3 & 0x3FF);
//      this.YUVTile[(i18 + 3)] = this.rangeLimitTableShort[(i19 + 256)];
//      
//      j += 8;
//    }
//  }
//  
//  final void updateReadBuf(int paramInt)
//  {
//    if (m_newbits - paramInt <= 0)
//    {
//      this.uprdbuf_readbuf = getLong(this.m_RecvBuffer[(SOCIVTPPktHdr.VIRTADD + this._index)]);
//      this._index += 1;
//      this.m_RecvBuffer[0] = ((int)(getLong(this.m_RecvBuffer[0]) << paramInt) | (int)((getLong(this.m_RecvBuffer[1]) | this.uprdbuf_readbuf >> m_newbits) >> 32 - paramInt));
//      this.m_RecvBuffer[1] = ((int)(this.uprdbuf_readbuf << paramInt - m_newbits));
//      m_newbits = 32 + m_newbits - paramInt;
//    }
//    else
//    {
//      this.m_RecvBuffer[0] = ((int)(getLong(this.m_RecvBuffer[0]) << paramInt) | (int)(getLong(this.m_RecvBuffer[1]) >> 32 - paramInt));
//      this.m_RecvBuffer[1] = ((int)(getLong(this.m_RecvBuffer[1]) << paramInt));
//      m_newbits -= paramInt;
//    }
//  }
//  
//  void convertYUVtoRGB(int paramInt1, int paramInt2)
//  {
//    int i6 = 0;
//    int i7 = 0;
//    int i8 = 0;
//    int i9 = 0;
//    int i10 = 8;
//    int m;
//    int n;
//    int i1;
//    int i2;
//    int i3;
//    if (this.m_Mode420 == 0)
//    {
//      this.YValueInTile = this.YUVTile;
//      for (int i = 0; i < 64; i++)
//      {
//        this.CbValueInTile[i] = this.YUVTile[(64 + i)];
//        this.CrValueInTile[i] = this.YUVTile[(128 + i)];
//      }
//      int i4 = paramInt1 * 8;
//      int i5 = paramInt2 * 8;
//      int k = i5 * this.RealWIDTH + i4;
//      
//      i10 = this.RealWIDTH - i4;
//      if ((i10 == 0) || (i10 > 8)) {
//        i10 = 8;
//      }
//      for (int j = 0; j < 8; j++)
//      {
//        for (int i = 0; i < i10; i++)
//        {
//          m = (j << 3) + i;
//          n = (k + i) * 3;
//          
//          i1 = this.YValueInTile[m];
//          i2 = this.CbValueInTile[m];
//          i3 = this.CrValueInTile[m];
//          
//          this.previousYUVData[n] = i1;
//          this.previousYUVData[(n + 1)] = i2;
//          this.previousYUVData[(n + 2)] = i3;
//          
//          i7 = this.calculatedRGBofY[i1] + this.calculatedRGBofCbToB[i2];
//          i8 = this.calculatedRGBofY[i1] + (this.calculatedRGBofCbToG[i2] + this.calculatedRGBofCrToG[i3]);
//          i9 = this.calculatedRGBofY[i1] + this.calculatedRGBofCrToR[i3];
//          if (i7 >= 0) {
//            i7 += 256;
//          } else {
//            i7 = 0;
//          }
//          if (i8 >= 0) {
//            i8 += 256;
//          } else {
//            i8 = 0;
//          }
//          if (i9 >= 0) {
//            i9 += 256;
//          } else {
//            i9 = 0;
//          }
//          if (n < this.RealWIDTH * this.RealHEIGHT * 3)
//          {
//            this.m_decodeBuf[n] = this.rangeLimitTable[i7];
//            this.m_decodeBuf[(n + 1)] = this.rangeLimitTable[i8];
//            this.m_decodeBuf[(n + 2)] = this.rangeLimitTable[i9];
//            
//            this.m_socvidClnt.SetPointInSavedScreen(i4 + i, i5 + j, this.m_decodeBuf[n], this.m_decodeBuf[(n + 1)], this.m_decodeBuf[(n + 2)]);
//          }
//        }
//        k += this.RealWIDTH;
//      }
//    }
//    i6 = 0;
//    for (int i = 0; i < 4; i++) {
//      for (int j = 0; j < 64; j++)
//      {
//        this.YValueInTile420[i][j] = this.YUVTile[i6];
//        i6++;
//      }
//    }
//    for (int j = 0; j < 64; j++)
//    {
//      this.CbValueInTile[j] = this.YUVTile[i6];
//      this.CrValueInTile[j] = this.YUVTile[(i6 + 64)];
//      i6++;
//    }
//    int i4 = paramInt1 * 16;
//    int i5 = paramInt2 * 16;
//    
//    int k = i5 * this.WIDTH + i4;
//    
//    int i11 = 0;
//    int i12 = 0;
//    int i13 = 0;
//    int i14 = 0;
//    int i15 = 0;
//    int i16 = 0;
//    int i17 = 0;
//    int i18 = 0;
//    
//    int i19 = 16;
//    if ((this.HEIGHT == 608) && (paramInt2 == 37)) {
//      i19 = 8;
//    }
//    for (int j = 0; j < i19; j++)
//    {
//      i17 = (j >> 3) * 2;
//      i18 = j >> 1 << 3;
//      for (int i = 0; i < 16; i++)
//      {
//        i16 = i17 + (i >> 3);
//        switch (i16)
//        {
//        case 0: 
//          i11 = i12++;
//          break;
//        case 1: 
//          i11 = i13++;
//          break;
//        case 2: 
//          i11 = i14++;
//          break;
//        default: 
//          i11 = i15++;
//        }
//        n = (k + i) * 3;
//        m = i18 + (i >> 1);
//        
//        i1 = this.YValueInTile420[i16][i11];
//        i2 = this.CbValueInTile[m];
//        i3 = this.CrValueInTile[m];
//        
//        i7 = this.calculatedRGBofY[i1] + this.calculatedRGBofCbToB[i2];
//        i8 = this.calculatedRGBofY[i1] + (this.calculatedRGBofCbToG[i2] + this.calculatedRGBofCrToG[i3]);
//        i9 = this.calculatedRGBofY[i1] + this.calculatedRGBofCrToR[i3];
//        if (i7 >= 0) {
//          this.m_decodeBuf[n] = this.rangeLimitTable[(i7 + 256)];
//        } else {
//          this.m_decodeBuf[n] = 0;
//        }
//        if (i8 >= 0) {
//          this.m_decodeBuf[(n + 1)] = this.rangeLimitTable[(i8 + 256)];
//        } else {
//          this.m_decodeBuf[(n + 1)] = 0;
//        }
//        if (i9 >= 0) {
//          this.m_decodeBuf[(n + 2)] = this.rangeLimitTable[(i9 + 256)];
//        } else {
//          this.m_decodeBuf[(n + 2)] = 0;
//        }
//        this.m_socvidClnt.SetPointInSavedScreen(i4 + i, i5 + j, this.m_decodeBuf[n], this.m_decodeBuf[(n + 1)], this.m_decodeBuf[(n + 2)]);
//      }
//      k += this.RealWIDTH;
//    }
//  }
//  
//  void convertYUVToRGBPass2(int paramInt1, int paramInt2)
//  {
//    int i9 = 8;
//    if (this.m_Mode420 == 0)
//    {
//      this.YValueInTile = this.YUVTile;
//      for (int i = 0; i < 64; i++)
//      {
//        this.CbValueInTile[i] = this.YUVTile[(64 + i)];
//        this.CrValueInTile[i] = this.YUVTile[(128 + i)];
//      }
//      int i7 = paramInt1 * 8;
//      int i8 = paramInt2 * 8;
//      int k = i8 * this.RealWIDTH + i7;
//      
//      i9 = this.RealWIDTH - i7;
//      if ((i9 == 0) || (i9 > 8)) {
//        i9 = 8;
//      }
//      for (int j = 0; j < 8; j++)
//      {
//        for (int i = 0; i < i9; i++)
//        {
//          int m = (j << 3) + i;
//          int n = (k + i) * 3;
//          
//          int i1 = this.previousYUVData[n] + (this.YValueInTile[m] - 128);
//          int i2 = this.previousYUVData[(n + 1)] + (this.CbValueInTile[m] - 128);
//          int i3 = this.previousYUVData[(n + 2)] + (this.CrValueInTile[m] - 128);
//          if (i1 < 0) {
//            i1 = 0;
//          }
//          if (i1 > 255) {
//            i1 = 255;
//          }
//          if (i2 < 0) {
//            i2 = 0;
//          }
//          if (i2 > 255) {
//            i2 = 255;
//          }
//          if (i3 < 0) {
//            i3 = 0;
//          }
//          if (i3 > 255) {
//            i3 = 255;
//          }
//          int i4 = this.calculatedRGBofY[i1] + this.calculatedRGBofCbToB[i2];
//          int i5 = this.calculatedRGBofY[i1] + (this.calculatedRGBofCbToG[i2] + this.calculatedRGBofCrToG[i3]);
//          int i6 = this.calculatedRGBofY[i1] + this.calculatedRGBofCrToR[i3];
//          if (i4 >= 0) {
//            i4 += 256;
//          } else {
//            i4 = 0;
//          }
//          if (i5 >= 0) {
//            i5 += 256;
//          } else {
//            i5 = 0;
//          }
//          if (i6 >= 0) {
//            i6 += 256;
//          } else {
//            i6 = 0;
//          }
//          if (n < this.RealWIDTH * this.RealHEIGHT * 3)
//          {
//            this.m_decodeBuf[n] = this.rangeLimitTable[i4];
//            this.m_decodeBuf[(n + 1)] = this.rangeLimitTable[i5];
//            this.m_decodeBuf[(n + 2)] = this.rangeLimitTable[i6];
//            
//            this.m_socvidClnt.SetPointInSavedScreen(i7 + i, i8 + j, this.m_decodeBuf[n], this.m_decodeBuf[(n + 1)], this.m_decodeBuf[(n + 2)]);
//          }
//        }
//        k += this.RealWIDTH;
//      }
//    }
//    System.out.println("Receive Pass 2 data in YUV420 mode");
//  }
//  
//  final void decompressJPEG(int paramInt1, int paramInt2, byte paramByte)
//  {
//    decodeHuffmanDataUnit(this.m_YDC_nr, this.m_YAC_nr, m_DCY, (short)0);
//    inverseDCT(0, paramByte);
//    if (this.m_Mode420 == 1)
//    {
//      decodeHuffmanDataUnit(this.m_YDC_nr, this.m_YAC_nr, m_DCY, (short)64);
//      inverseDCT(64, paramByte);
//      
//      decodeHuffmanDataUnit(this.m_YDC_nr, this.m_YAC_nr, m_DCY, (short)128);
//      inverseDCT(128, paramByte);
//      if ((SOCIVTPPktHdr.gTxb == 0) && (SOCIVTPPktHdr.gTyb == 1)) {
//        SOCIVTPPktHdr.gCheck = 100;
//      }
//      decodeHuffmanDataUnit(this.m_YDC_nr, this.m_YAC_nr, m_DCY, (short)192);
//      inverseDCT(192, paramByte);
//      if ((SOCIVTPPktHdr.gTxb == 0) && (SOCIVTPPktHdr.gTyb == 1)) {
//        SOCIVTPPktHdr.gCheck = 101;
//      }
//      decodeHuffmanDataUnit(this.m_CbDC_nr, this.m_CbAC_nr, DCCb, (short)256);
//      inverseDCT(256, (byte)(paramByte + 1));
//      
//      decodeHuffmanDataUnit(this.m_CrDC_nr, this.m_CrAC_nr, DCCr, (short)320);
//      inverseDCT(320, (byte)(paramByte + 1));
//    }
//    else
//    {
//      decodeHuffmanDataUnit(this.m_CbDC_nr, this.m_CbAC_nr, DCCb, (short)64);
//      inverseDCT(64, (byte)(paramByte + 1));
//      
//      decodeHuffmanDataUnit(this.m_CrDC_nr, this.m_CrAC_nr, DCCr, (short)128);
//      inverseDCT(128, (byte)(paramByte + 1));
//    }
//    convertYUVtoRGB(paramInt1, paramInt2);
//  }
//  
//  void decompressJPEGPass2(int paramInt1, int paramInt2, byte paramByte)
//  {
//    decodeHuffmanDataUnit(this.m_YDC_nr, this.m_YAC_nr, m_DCY, (short)0);
//    inverseDCT(0, paramByte);
//    
//    decodeHuffmanDataUnit(this.m_CbDC_nr, this.m_CbAC_nr, DCCb, (short)64);
//    inverseDCT(64, (byte)(paramByte + 1));
//    
//    decodeHuffmanDataUnit(this.m_CrDC_nr, this.m_CrAC_nr, DCCr, (short)128);
//    inverseDCT(128, (byte)(paramByte + 1));
//    
//    convertYUVToRGBPass2(paramInt1, paramInt2);
//  }
//  
//  void decompressVQ(int paramInt1, int paramInt2, byte paramByte)
//  {
//    int i = 0;
//    int j = 0;
//    if (this.m_VQ.BitMapBits == 0) {
//      for (int k = 0; k < 64; k++)
//      {
//        this.YUVTile[(j + 0)] = ((char)(int)((this.m_VQ.Color[this.m_VQ.Index[0]] & 0xFF0000) >> 16));
//        this.YUVTile[(j + 64)] = ((char)(int)((this.m_VQ.Color[this.m_VQ.Index[0]] & 0xFF00) >> 8));
//        this.YUVTile[(j + 128)] = ((char)(int)(this.m_VQ.Color[this.m_VQ.Index[0]] & 0xFF));
//        j++;
//      }
//    }
//    for (int k = 0; k < 64; k++)
//    {
//      i = lookKbits(this.m_VQ.BitMapBits);
//      this.YUVTile[(j + 0)] = ((char)(int)((this.m_VQ.Color[this.m_VQ.Index[i]] & 0xFF0000) >> 16));
//      this.YUVTile[(j + 64)] = ((char)(int)((this.m_VQ.Color[this.m_VQ.Index[i]] & 0xFF00) >> 8));
//      this.YUVTile[(j + 128)] = ((char)(int)(this.m_VQ.Color[this.m_VQ.Index[i]] & 0xFF));
//      j++;
//      skipKbits(this.m_VQ.BitMapBits);
//    }
//    convertYUVtoRGB(paramInt1, paramInt2);
//  }
//  
//  final void moveBlockIndex()
//  {
//    this.txb += 1;
//    if (this.txb == this.tmp_WIDTHBy16) {
//      this.m_view.repaint((this.txb - 1) * 16, this.tyb * 16, 16, 16);
//    }
//    if (this.m_Mode420 == 0)
//    {
//      if (this.txb >= this.tmp_WIDTHBy16 / 8)
//      {
//        this.tyb += 1;
//        if (this.tyb >= this.tmp_HEIGHTBy16 / 8) {
//          this.tyb = 0;
//        }
//        this.txb = 0;
//      }
//    }
//    else if (this.txb >= this.tmp_WIDTHBy16 / 16)
//    {
//      this.tyb += 1;
//      if (this.tyb >= this.tmp_HEIGHTBy16 / 16) {
//        this.tyb = 0;
//      }
//      this.txb = 0;
//    }
//    SOCIVTPPktHdr.gTxb = this.txb;
//    SOCIVTPPktHdr.gTyb = this.tyb;
//    this.pixels += 256L;
//  }
//  
//  public void decode(VideoEngineInfo paramVideoEngineInfo, int[] paramArrayOfInt)
//  {
//    int i = 0;
//    int j = 0;
//    int k = 0;
//    int m = 0;
//    try
//    {
//      for (m = 0; m < 4; m++) {
//        this.m_VQ.Index[m] = ((char)m);
//      }
//      this.m_VQ.Color[0] = 32896L;
//      this.m_VQ.Color[1] = 16744576L;
//      this.m_VQ.Color[2] = 8421504L;
//      this.m_VQ.Color[3] = 12615808L;
//      
//      this.WIDTH = paramVideoEngineInfo.SourceModeInfo.X;
//      this.HEIGHT = paramVideoEngineInfo.SourceModeInfo.Y;
//      this.RealWIDTH = paramVideoEngineInfo.SourceModeInfo.X;
//      this.RealHEIGHT = paramVideoEngineInfo.SourceModeInfo.Y;
//      
//      this.m_Mode420 = paramVideoEngineInfo.FrameHeader.Mode420;
//      if (this.m_Mode420 == 1)
//      {
//        if (this.WIDTH % 16 != 0) {
//          this.WIDTH = (this.WIDTH + 16 - this.WIDTH % 16);
//        }
//        if (this.HEIGHT % 16 != 0) {
//          this.HEIGHT = (this.HEIGHT + 16 - this.HEIGHT % 16);
//        }
//      }
//      else
//      {
//        if (this.WIDTH % 8 != 0) {
//          this.WIDTH = (this.WIDTH + 8 - this.WIDTH % 8);
//        }
//        if (this.HEIGHT % 8 != 0) {
//          this.HEIGHT = (this.HEIGHT + 8 - this.HEIGHT % 8);
//        }
//      }
//      this.tmp_WIDTHBy16 = paramVideoEngineInfo.DestinationModeInfo.X;
//      this.tmp_HEIGHTBy16 = paramVideoEngineInfo.DestinationModeInfo.Y;
//      if (this.m_Mode420 == 1)
//      {
//        if (this.tmp_WIDTHBy16 % 16 != 0) {
//          this.tmp_WIDTHBy16 = (this.tmp_WIDTHBy16 + 16 - this.tmp_WIDTHBy16 % 16);
//        }
//        if (this.tmp_HEIGHTBy16 % 16 != 0) {
//          this.tmp_HEIGHTBy16 = (this.tmp_HEIGHTBy16 + 16 - this.tmp_HEIGHTBy16 % 16);
//        }
//      }
//      else
//      {
//        if (this.tmp_WIDTHBy16 % 8 != 0) {
//          this.tmp_WIDTHBy16 = (this.tmp_WIDTHBy16 + 8 - this.tmp_WIDTHBy16 % 8);
//        }
//        if (this.tmp_HEIGHTBy16 % 8 != 0) {
//          this.tmp_HEIGHTBy16 = (this.tmp_HEIGHTBy16 + 8 - this.tmp_HEIGHTBy16 % 8);
//        }
//      }
//      j = paramVideoEngineInfo.CompressData.CompressSize / 4;
//      if (paramVideoEngineInfo.FrameHeader.RC4Enable == 1)
//      {
//        if (!this.DecodeRC4State)
//        {
//          Keys_Expansion(this.DecodeKeys);
//          DecodeRC4_setup(this.DecodeKeys, paramVideoEngineInfo);
//        }
//        RC4_crypt(this.m_RecvBuffer, (int)(getLong(j) * 4L));
//      }
//      this.yheader.qfactor = paramVideoEngineInfo.FrameHeader.JPEGScaleFactor;
//      this.yheader.height = paramVideoEngineInfo.DestinationModeInfo.Y;
//      this.yheader.width = paramVideoEngineInfo.DestinationModeInfo.X;
//      i = paramVideoEngineInfo.FrameHeader.NumberOfMB;
//      this.SCALEFACTOR = 16;
//      this.SCALEFACTORUV = 16;
//      this.ADVANCESCALEFACTOR = 16;
//      this.ADVANCESCALEFACTORUV = 16;
//      this.selector = paramVideoEngineInfo.FrameHeader.JPEGTableSelector;
//      this.advance_selector = paramVideoEngineInfo.FrameHeader.AdvanceTableSelector;
//      this.Mapping = paramVideoEngineInfo.FrameHeader.JPEGYUVTableMapping;
//      this.byte_pos = 0;
//      
//      loadLuminanceQuantizationTable(this.m_QT[0]);
//      loadChrominanceQuantizationTable(this.m_QT[1]);
//      loadPass2LuminanceQuantizationTable(this.m_QT[2]);
//      loadPass2ChrominanceQuantizationTable(this.m_QT[3]);
//      
//      this.m_RecvBuffer = paramArrayOfInt;
//      this._index = 2;
//      
//      this.txb = (this.tyb = 0);
//      m_newbits = 32;
//      m_DCY[0] = (DCCb[0] = DCCr[0] = 0);
//      do
//      {
//        if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 0L)
//        {
//          updateReadBuf(4);
//          decompressJPEG(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 8L)
//        {
//          this.txb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF00000) >> 20));
//          this.tyb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF000) >> 12));
//          
//          updateReadBuf(20);
//          decompressJPEG(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 2L)
//        {
//          updateReadBuf(4);
//          decompressJPEGPass2(this.txb, this.tyb, (byte)2);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 10L)
//        {
//          this.txb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF00000) >> 20));
//          this.tyb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF000) >> 12));
//          
//          updateReadBuf(20);
//          decompressJPEGPass2(this.txb, this.tyb, (byte)2);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 5L)
//        {
//          updateReadBuf(4);
//          
//          this.m_VQ.BitMapBits = 0;
//          for (m = 0; m < 1; m++)
//          {
//            this.m_VQ.Index[m] = ((char)(int)(getLong(this.m_RecvBuffer[0]) >> 29 & 0x3));
//            if ((getLong(this.m_RecvBuffer[0]) >> 31 & 1L) == 0L)
//            {
//              updateReadBuf(3);
//            }
//            else
//            {
//              this.m_VQ.Color[this.m_VQ.Index[m]] = (getLong(this.m_RecvBuffer[0]) >> 5 & 0xFFFFFF);
//              updateReadBuf(27);
//            }
//          }
//          decompressVQ(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 13L)
//        {
//          this.txb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF00000) >> 20));
//          this.tyb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF000) >> 12));
//          
//          updateReadBuf(20);
//          this.m_VQ.BitMapBits = 0;
//          for (m = 0; m < 1; m++)
//          {
//            this.m_VQ.Index[m] = ((char)(int)(getLong(this.m_RecvBuffer[0]) >> 29 & 0x3));
//            if ((getLong(this.m_RecvBuffer[0]) >> 31 & 1L) == 0L)
//            {
//              updateReadBuf(3);
//            }
//            else
//            {
//              this.m_VQ.Color[this.m_VQ.Index[m]] = (getLong(this.m_RecvBuffer[0]) >> 5 & 0xFFFFFF);
//              updateReadBuf(27);
//            }
//          }
//          decompressVQ(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 6L)
//        {
//          updateReadBuf(4);
//          this.m_VQ.BitMapBits = 1;
//          for (m = 0; m < 2; m++)
//          {
//            this.m_VQ.Index[m] = ((char)(int)(getLong(this.m_RecvBuffer[0]) >> 29 & 0x3));
//            if ((getLong(this.m_RecvBuffer[0]) >> 31 & 1L) == 0L)
//            {
//              updateReadBuf(3);
//            }
//            else
//            {
//              this.m_VQ.Color[this.m_VQ.Index[m]] = (getLong(this.m_RecvBuffer[0]) >> 5 & 0xFFFFFF);
//              updateReadBuf(27);
//            }
//          }
//          decompressVQ(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 14L)
//        {
//          this.txb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF00000) >> 20));
//          this.tyb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF000) >> 12));
//          
//          updateReadBuf(20);
//          this.m_VQ.BitMapBits = 1;
//          for (m = 0; m < 2; m++)
//          {
//            this.m_VQ.Index[m] = ((char)(int)(getLong(this.m_RecvBuffer[0]) >> 29 & 0x3));
//            if ((getLong(this.m_RecvBuffer[0]) >> 31 & 1L) == 0L)
//            {
//              updateReadBuf(3);
//            }
//            else
//            {
//              this.m_VQ.Color[this.m_VQ.Index[m]] = (getLong(this.m_RecvBuffer[0]) >> 5 & 0xFFFFFF);
//              updateReadBuf(27);
//            }
//          }
//          decompressVQ(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 7L)
//        {
//          updateReadBuf(4);
//          this.m_VQ.BitMapBits = 2;
//          for (m = 0; m < 4; m++)
//          {
//            this.m_VQ.Index[m] = ((char)(int)(getLong(this.m_RecvBuffer[0]) >> 29 & 0x3));
//            if ((getLong(this.m_RecvBuffer[0]) >> 31 & 1L) == 0L)
//            {
//              updateReadBuf(3);
//            }
//            else
//            {
//              this.m_VQ.Color[this.m_VQ.Index[m]] = (getLong(this.m_RecvBuffer[0]) >> 5 & 0xFFFFFF);
//              updateReadBuf(27);
//            }
//          }
//          decompressVQ(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 15L)
//        {
//          this.txb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF00000) >> 20));
//          this.tyb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF000) >> 12));
//          
//          updateReadBuf(20);
//          this.m_VQ.BitMapBits = 2;
//          for (m = 0; m < 4; m++)
//          {
//            this.m_VQ.Index[m] = ((char)(int)(getLong(this.m_RecvBuffer[0]) >> 29 & 0x3));
//            if ((getLong(this.m_RecvBuffer[0]) >> 31 & 1L) == 0L)
//            {
//              updateReadBuf(3);
//            }
//            else
//            {
//              this.m_VQ.Color[this.m_VQ.Index[m]] = (getLong(this.m_RecvBuffer[0]) >> 5 & 0xFFFFFF);
//              updateReadBuf(27);
//            }
//          }
//          decompressVQ(this.txb, this.tyb, (byte)0);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 4L)
//        {
//          updateReadBuf(4);
//          decompressJPEG(this.txb, this.tyb, (byte)2);
//          moveBlockIndex();
//        }
//        else if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 12L)
//        {
//          this.txb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF00000) >> 20));
//          this.tyb = ((int)((getLong(this.m_RecvBuffer[0]) & 0xFF000) >> 12));
//          
//          updateReadBuf(20);
//          decompressJPEG(this.txb, this.tyb, (byte)2);
//          moveBlockIndex();
//        }
//        else
//        {
//          if ((getLong(this.m_RecvBuffer[0]) >> 28 & 0xF) == 9L) {
//            return;
//          }
//          System.out.println("Unknow Marco Block type " + (getLong(this.m_RecvBuffer[0]) >> 28));
//          updateReadBuf(3);
//          moveBlockIndex();
//        }
//        this.m_view.repaint((this.txb - 1) * 16, this.tyb * 16, 16, 16);
//        k++;
//      } while (this._index < j);
//    }
//    catch (Exception localException)
//    {
//      localException.printStackTrace();
//    }
//  }
//  
//  void RC4_crypt(int[] paramArrayOfInt, int paramInt)
//  {
//    int j = this.s.x;
//    int k = this.s.y;
//    this.rc4Tmp = this.s.m;
//    for (int i = 0; i < paramInt; i++)
//    {
//      j = (byte)(j + 1);
//      int m = this.rc4Tmp[j];
//      k = (byte)(k + m);
//      int n;
//      this.rc4Tmp[j] = (n = this.rc4Tmp[k]);
//      this.rc4Tmp[k] = m;
//      paramArrayOfInt[(SOCIVTPPktHdr.VIRTADD + i)] ^= this.rc4Tmp[((byte)(m + n))];
//    }
//    this.s.x = j;
//    this.s.y = k;
//  }
//  
//  void DecodeRC4_setup(byte[] paramArrayOfByte, VideoEngineInfo paramVideoEngineInfo)
//  {
//    int[] arrayOfInt = new int['?'];
//    
//    this.s.x = 0;
//    this.s.y = 0;
//    arrayOfInt = this.s.m;
//    for (int i = 0; i < 256; i++) {
//      arrayOfInt[i] = i;
//    }
//    int k;
//    int j = k = 0;
//    for (int i = 0; i < 256; i++)
//    {
//      int m = arrayOfInt[i];
//      j = (byte)(j + m + paramArrayOfByte[k]);
//      arrayOfInt[i] = arrayOfInt[j];
//      arrayOfInt[j] = m;
//      k++;
//    }
//  }
//  
//  void Keys_Expansion(byte[] paramArrayOfByte)
//  {
//    int j = (short)paramArrayOfByte.length;
//    for (int i = 0; i < 256; i = (short)(i + 1)) {
//      paramArrayOfByte[i] = paramArrayOfByte[(i % j)];
//    }
//  }
//}
